package com.grupobbva.seguridad.web.servlet.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.grupobbva.seguridad.domain.Empresa;
import com.grupobbva.seguridad.domain.EmpresaAcceso;
import com.grupobbva.seguridad.domain.TablaDetalle;
import com.grupobbva.seguridad.service.AdministracionService;
import com.grupobbva.seguridad.service.SeguridadService;
import com.grupobbva.seguridad.util.ResultadoOperacion;
import com.grupobbva.seguridad.util.ResultadoOperacionExito;
import com.grupobbva.seguridad.util.Util;


/**
 * The Class MantenimientoEmpresaController.
 * Nueva clase controller creado 18-11-2013
 */
@Controller
public class MantenimientoEmpresaController extends BaseController {

	/** The administracion service. */
	@Autowired
	private AdministracionService administracionService;
	
	/** The seguridad service. */
	@Autowired
	private SeguridadService seguridadService;

	/**
	 * Mostrar.
	 *
	 * @param request the request
	 * @return the string
	 * @throws Exception the exception
	 */
	@RequestMapping("/empmnt.do")
    public String mostrar(HttpServletRequest request) throws Exception {
		request.setAttribute("aplicacion", seguridadService.obtenerAplicacion(getParameterLong(request, "aplicacionId")));
    	return getRelativeURL("empmnt");
    }
	
	
	/**
	 * Listar.
	 *
	 * @param request the request
	 * @return the string
	 * @throws Exception the exception
	 */
	@RequestMapping("/emplst.do")
    public String listar(HttpServletRequest request) throws Exception {
		EmpresaAcceso empresaAcceso = new EmpresaAcceso();
		
		String codigoId = request.getParameter("filtroAplicacionId");
		com.grupobbva.seguridad.domain.Aplicacion aplicacion = new com.grupobbva.seguridad.domain.Aplicacion();
		aplicacion.setAplicacionId(Long.valueOf(codigoId));
		empresaAcceso.setAplicacion(aplicacion);
		
		
		request.setAttribute("empresas", seguridadService.obtenerEmpresas(empresaAcceso));
		request.getSession().setAttribute("idAplicacion", codigoId);
		
    	return getRelativeURL("emplst");
    }
	
	/**
	 * Modificar.
	 *
	 * @param request the request
	 * @return the string
	 * @throws Exception the exception
	 */
	@RequestMapping("/empupd.do")
    public String modificar(HttpServletRequest request) throws Exception {
		EmpresaAcceso empresaAcceso= new EmpresaAcceso();
		empresaAcceso.setEstado(new TablaDetalle());
		List<Empresa> lstEmpresas = new ArrayList<Empresa>();
		lstEmpresas = administracionService.obtenerListadoEmpresas();
		
		request.setAttribute("lstEmpresas",  lstEmpresas);
		request.setAttribute("empresaAcceso",  empresaAcceso);
		request.getSession().setAttribute("lstEmpresas", lstEmpresas);
    	return getRelativeURL("empreg");
    }
	
	/**
	 * Eliminar.
	 *
	 * @param request the request
	 * @return the string
	 * @throws Exception the exception
	 */
	@RequestMapping("/empdel.do")
    public String eliminar(HttpServletRequest request) throws Exception {
    	ResultadoOperacion resultado = null;
		try {
			String codigoMensaje  = "empresa.eliminar.exito";
			String codigoAplicacion = request.getParameter("aplicacionId");
			String codigoEmpresa = request.getParameter("empresaId");
			EmpresaAcceso empresaAcceso = new EmpresaAcceso();
			com.grupobbva.seguridad.domain.Aplicacion aplicacion = new com.grupobbva.seguridad.domain.Aplicacion();
			aplicacion.setAplicacionId(Long.valueOf(codigoAplicacion));
			empresaAcceso.setAplicacion(aplicacion);
			empresaAcceso.setCodigoEmpresa(Long.valueOf(codigoEmpresa));
						
			seguridadService.eliminarEmpresa(empresaAcceso);
			
			resultado = new ResultadoOperacionExito(Util.getMessage(codigoMensaje));
		} catch (Exception e) {
			resultado = guardarMensajeError(request, e);
		}
    	return getRelativeAjaxURL(request, resultado);
    }
	
	/**
	 * Grabar empresa.
	 *
	 * @param empresaAcceso the empresa acceso
	 * @param request the request
	 * @return the string
	 * @throws Exception the exception
	 */
	@RequestMapping("/empopcreg.do")
    public String grabarEmpresa(@ModelAttribute("empresaAcceso") EmpresaAcceso empresaAcceso, HttpServletRequest request) throws Exception {
		ResultadoOperacion resultado = null;
		//obtener 
		String codigoId = (String) request.getSession().getAttribute("idAplicacion");
		com.grupobbva.seguridad.domain.Aplicacion aplicacion = new com.grupobbva.seguridad.domain.Aplicacion();
		aplicacion.setAplicacionId(Long.valueOf(codigoId));
		empresaAcceso.setAplicacion(aplicacion);
		TablaDetalle tablaDetalle = new TablaDetalle();
		tablaDetalle.setDetalleId(1L);
		empresaAcceso.setEstado(tablaDetalle);
		String nombreEmpresa = obtenerNombreEmpresa(Integer.parseInt(empresaAcceso.getCodigoEmpresa().toString()), request);
		empresaAcceso.setNombreEmpresa(nombreEmpresa);
		try {
			String codigoMensaje  = null;
				codigoMensaje  = "empresa.opciones.registrar.exito";
				seguridadService.registrarEmpresa(empresaAcceso, getUsuario(request));
			
			resultado = new ResultadoOperacionExito(Util.getMessage(codigoMensaje));
		} catch (Exception e) {
			resultado = guardarMensajeError(request, e);
		}
    	return getRelativeAjaxURL(request, resultado);
    }
	
	/**
	 * Obtener nombre empresa.
	 *
	 * @param codEmpresa the cod empresa
	 * @param request the request
	 * @return the string
	 */
	public String obtenerNombreEmpresa(Integer codEmpresa, HttpServletRequest request) {
		List<Empresa> lstEmpresas = new ArrayList<Empresa>();
		String nombreEmpresa = "";
		lstEmpresas = (List<Empresa>) request.getSession().getAttribute("lstEmpresas");
		for (Empresa lst : lstEmpresas) {
			if (lst.getCodEmpresa().equals(codEmpresa)) {
				nombreEmpresa = lst.getNombreEmpresa();
				break;
			}
			
		}
		
		return nombreEmpresa;
	}

	
}
